const { Service } = require('egg');

class MessageService extends Service {
  // 获取所有留言信息
  async getMessageList(page, pageSize) {
    try {
      if (page && pageSize) {
        const MessageList = await this.app.model.Message.findAll(
          {
            offset: (page - 1) * pageSize, // 查询的起始位置
            limit: Number(pageSize),
            order: [[ 'created_at', 'DESC' ]],
            include: {
              model: this.app.model.Reply,
            },
          }
        );
        return MessageList;
      }

    } catch (error) {
      // 获取失败
      return error;
    }
  }
  // 根据id获取留言
  async getMessageById(id) {
    const result = await this.app.model.Message.findOne({
      where: { id },
      include: [{
        model: this.app.model.Reply,
      }],
    });
    return result;
  }
  // 创建留言
  async addMessage(data) {
    try {
      // console.log('经历了服务层');
      const addMessageList = await this.app.model.Message.create(data);
      // 在创建留言时，自动在回复表根据id新建一条数据，以便于管理员恢复时，对评论id进行回复
      if (addMessageList) {
        const comment_id = addMessageList.id;
        await this.app.model.Reply.create({
          comment_id,
          content: '',
        });
      }

      return addMessageList;
    } catch (error) {
      // 获取失败
      return error;
    }
  }
  // 根据id删除留言
  async delMessage(id) {
    try {
      const result = await this.app.model.Message.findByPk(id);
      if (result) {
        await result.destroy();
      }
      return true;
    } catch (error) {
      this.ctx.logger.error(error);
      this.ctx.body = {
        code: error.code || 500,
        message: error.message || '服务器错误',
      };
    }

  }
  // 获取所有的回复列表
  async getReply() {
    return await this.app.model.Reply.findAll();
  }
  // 管理员给用户回复留言
  async replyUser(id, data) {
    try {
      const result = await this.app.model.Reply.create({
        comment_id: id,
        content: data,
      });
      return result;
    } catch (error) {
      this.ctx.logger.error(error);
      this.ctx.body = {
        code: error.code || 500,
        message: error.message || '服务器错误',
      };
    }

  }
  // 管理员根据用户id修改回复
  async updateRep(id, data) {
    const { app } = this;
    // 回复之前先检查有没有这个用户的id
    const updateNewReply = await app.model.Reply.findOne({ where: { comment_id: id },
    });

    if (updateNewReply) {
      // const updateRep = await result.update(data);
      // console.log(updateRep);
      updateNewReply.content = data;
      await updateNewReply.save();
    }
    return updateNewReply;
    // console.log(result);
    // return result;
  }
}
module.exports = MessageService;
